/*
    编程实现给出一个年月日信息，确定这一天是这一年中的第几天（存在问题---待后续学会后解决，如何解决用户输入进来的是中文或者其他非整数的符号）
*/

import java.util.Scanner;

public class DayofYear {
    public static void main(String[] args) {
//          1 提示用户输入年月日信息并使用变量记录
        System.out.println("请依次输入年月日(输入皆为正整数哟)：");
        Scanner sc = new Scanner(System.in);
//        判断用户输入年份是否有效，即是正整数
//        如果用户输入的年份无效就会重新让该用户输入年份直到正确为止
        int year = sc.nextInt();
        boolean valid_year = false;
        while (valid_year == false) {
            if (year > 0) {
                valid_year = true;
            }
            else {
                System.out.println("对不起公元前或者0年不在输入范围内哟！请输入有效的年份：");
                year = sc.nextInt();
                }
            }
//            System.out.println("目前年份是" + year);

//        System.out.println("it is leap year ? " + leap);
//        判断用户输入的月份是否有效，即在1到12的整数范围内
        boolean valid_month = false;
        int month = sc.nextInt();
        while (valid_month == false) {
                if (month > 0 && month <= 12) {
                    valid_month = true;
                } else {
                    System.out.println("对不起找不到 " + month + "月，请输入有效的月份（从1到12）：");
                    month = sc.nextInt();
                }
            }
//            System.out.println("目前月份是" + month);
//          2 判断该年是否是闰年--判断是否是闰年需要满足下面任意一个条件：
//              a.能被4整除但是不能被100整除；
//              b.能被400整除；
        int[] month_length = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//除闰年外的年份每月天数用数组存起来，以便后续应用
        boolean leap = false;
        if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
                leap = true;
                month_length[1] = 29;//如果是闰年，则修改该年二月份的天数
//            System.out.println("yes! it is leap year!");
//            System.out.println(month_length[month-1]);
            }
//        System.out.println(month_length[month-1]);

//          3 确定日期是否有效，日期需在该月有的日期范围之内，如2月，闰年时可以输入到29，而非闰年则不可输入29
        boolean valid_day = false;
        int day = sc.nextInt();
        while (valid_day == false){
            if (day > 0 && day <= month_length[month-1]){
                valid_day = true;
            }
            else{
                System.out.println(month+"月有效的日期是从1到"+month_length[month-1]+"！请输入正确的日期：");
                day = sc.nextInt();
            }
        }
//       利用for循环来确定这是这一年的第几天，即将前几个月的每个月的长度累加，再加上本月的日期
        int dath = day;
        for(int i=0; i<month-1; i++){
            dath += month_length[i];
        }
        System.out.println("这是"+year+"年的第"+dath+"天");
    }
}

